"""
聚合函数用于对查询集中的数据进行聚合操作，如计算平均值、总和、最大值、最小值等。
"""
from product.models import Product
from django.http import HttpResponse
from django.db.models import Sum, Avg, Max, Count , Min, Q

# 基础统计
def agnotate_view(self):
    # 聚合函数 aggregate
    stats=  Product.objects.aggregate(
        # {'total_stock': 1432} 总库存 
        total_stock = Sum('stock'),
        # 平均价格 Decimal('1742.272000')}
        avg_price = Avg('price'),
        # 最高的价格 max
       max_price =  Max('price'),
        # 最低的价格
        min_pice = Min('price'),
        #  总数
        active_count  = Count('id', filter=Q(is_active=True)) # 上架商品数
    )
    # print(stats)
    """
    {'total_stock': 1432, 
    'avg_price': Decimal('1742.272000'), 
    'max_price': Decimal('5000.00'), 
    'min_pice': Decimal('64.00'),
      'active_count': 4}
    
    """

    # 分组annotate
    # 按照上架状态分组统计
    # 按照上架状态分组  values控制查询返回的数据格式，将queryset中的模型实例转换为字典类型，指定要返回的字段（sql语句中select）
    # <QuerySet [{'is_active': True}, {'is_active': False}, {'is_active': True}, {'is_active': True}, {'is_active': True}]>
    products_by_status = Product.objects.values('is_active').annotate(product__count=Count('id'), avg_stock=Avg('stock'))

    # 排序方法
    # 升序 从低到高 默认id，一般不需要写.order_by 除非要指定字段
    # 降序 从高到低 在order_by()中指定字段，在字段加上 - 
    products = Product.objects.all().order_by('price')

    products = Product.objects.all().order_by('-price')

    # 返回上架状态的商品并降序排序返回
    products = Product.objects.filter(is_active=True).order_by('-price')
    print(products)
    return HttpResponse("ok")
    